package com.xiaoquan.gulimall.product;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;

/**
 *  模板引擎
 *      1、thymeleaf-starter: 关闭缓存
 *      2、静态资源都放在static文件夹下就可以按照路径直接访问
 *      3、页面放在templates下，直接访问
 *      4、热部署  在页面修改不重启服务器的情况下 实时更新
 *          4.1、引入dev-tools
 *          4.2、前提关闭缓存  重新编译修改的页面 快捷键（ctrl+Shift+F9） 然后再刷新页面就可以了
 *
 *  整合redis
 *      1、引入spring-boot-start-data-redis-starter
 *      2、简单配置redis的host等信息
 *      3、使用SpringBoot自动配置好的StringRedisTemplate来操作redis
 *
 *  整合redisson作为分布式锁等功能框架
 *      1、引入依赖
 *            <dependency>
 *              <groupId>org.redisson</groupId>
 *              <artifactId>redisson</artifactId>
 *              <version>3.12.0</version>
 *            </dependency>
 *      2、配置redisson
 *
 *  整合SpringCatch简化缓存开发
 *      1、引入依赖 spring-boot-starter-cache 用redis作为缓存 spring-boot-starter-data-redis
 *      2、编写配置
 *          2.1、自动配置了那些
 *              CacheAutoConfiguration 会导入RedisCacheConfiguration
 *              自动配置好了缓存管理器RedisCacheManager
 *          2.2、配置redis 作为缓存 spring.cache.type=redis
 *       3、测试使用缓存
 *          @Cacheable: Trigger cache population; 触发数据保存到缓存的操作
 *          @CacheEvict: Trigger cache eviction; 触发将数据从缓存的操作
 *          @CachePut: Updates the cache without interfering with the method execution; 不影响方法执行更新缓存
 *          @Caching Regroups multiple cache operations to be applied on a method; 组合以上多个操作
 *          @CacjeConfig: Shares some common cache-related settings at class-level; 在类级别共享缓存的相同配置
 *              3.1、开启缓存功能 @EnableCaching
 *              3.2、只需要使用注解就能完成缓存操作
 *       4、原理
 *          CacheAutoConfiguration -> RedisCacheConfiguration
 *          -> 自动配置了RedisCacheManager -> 初始化所有缓存 -> 每个缓存决定使用使用配置
 *          -> 如果redisCacheConfiguration有就用已有的，没有就用默认配置
 *          -> 想改缓存的配置，只需要给容器中放一个RedisCacheConfiguration即可
 *          -> 就会应用到当前RedisCacheManager管理的所有缓存分区中
 *
 */

// 复制包名快捷键  ctrl + alt + shift + c
@EnableRedisHttpSession // 相当于开启了SpringSession功能  整合redis作为session存储
@EnableFeignClients(basePackages = "com.xiaoquan.gulimall.product.feign")  // 开启远程调用功能
@EnableDiscoveryClient
@MapperScan("com.xiaoquan.gulimall.product.dao")
@SpringBootApplication
public class GulimallProductApplication {

    public static void main(String[] args) {
        SpringApplication.run(GulimallProductApplication.class, args);
    }

}
